//
//  TYZSingleton.h
//  AiCheSong
//
//  Created by 李贤立 on 2017/11/10.
//  Copyright © 2017年 Capfer. All rights reserved.
//

// 头文件使用的宏 ##表示拼接前后两个字符串
#define TYZSingleto_h(name) + (instancetype)shared##name;

// 条件编译
#if __has_feature(objc_arc) // ARC环境
#define TYZSingleto_m(name) + (instancetype)shared##name {\
return [[self alloc] init];\
}\
+ (instancetype)allocWithZone:(struct _NSZone *)zone {\
static dispatch_once_t onceToken;\
static id instance = nil;\
dispatch_once(&onceToken,^{\
instance = [super allocWithZone:zone];\
});\
return instance;\
}\
- (id)copyWithZone:(NSZone *)zone {\
return self;\
}


#else //MRC环境
#define TYZSingleto_m(name) + (instancetype)shared##name {\
return [[self alloc] init];\
}\
+ (instancetype)allocWithZone:(struct _NSZone *)zone {\
static dispatch_once_t onceToken;\
static id instance = nil;\
dispatch_once(&onceToken,^{\
instance = [super allocWithZone:zone];\
});\
return instance;\
}\
- (id)copyWithZone:(NSZone *)zone {\
return self;\
}\
- (onceway void)release {\
\
}\
- (instancetype)autorelease {\
return self;\
}\
- (instancetype)retain {\
return self;\
}\
- (NSUInteger)retainCount {\
return 1;\
}

#endif /* TYZSingleton_h */
